export default {
   // 为当前模块开启命名空间
   namespaced: true,
   // 模块的 state 数据
   state: {
      list: JSON.parse(uni.getStorageSync('list') || '[]'),
   },
   // 模块的 mutations 方法
   mutations: {
      // addToCart添加购物车的方法
      addToCart(state, goods) {
         //定义findResult来寻找购物车模块中是否有已经存在的商品，
         // 根据商品id来查询
         const findResult = state.list.find(x => x.id === goods.id)
         // !findResult代表找不到商品，如果没有就将goods放到购物车中
         if (!findResult) {
            state.list.push(goods)
            //如果有，购物车中商品的数量
            // findResult.goods_count自增加1
         } else {
            findResult.num++
         }
         console.log(state.list);
         this.commit('cart/saveToStorage')
      },
      //存储购物车商品到本地
      saveToStorage(state) {
         uni.setStorageSync('list', JSON.stringify(state.list))
      },
      // 更新购物车中勾选中商品的方法
      updateGoodsState(state, goods) {
         // 定义一个x来接收从goods.goods_id中找到的商品
         const findResult = state.list.find(x => x.id === goods.id)
         // 如果找到商品
         if (findResult) {
            //把购物车中商品的状态赋值给他
            findResult.checked = goods.checked
            // 持久化存储信息
            this.commit('cart/saveToStorage')
         }
      },
      //更新商品属性
      updateGoodsCount(state, goods) {
         // x代表是商品
         const findResult = state.list.find(x => x.id === goods.id)
         //如果找到商品
         if (findResult) {
            // 就把查询到商品的数量赋值给用来接收数据的参数findResult
            findResult.num = goods.num
            // 将查询到的结果持久化存储到本地
            this.commit('cart/saveToStorage')
         }
      },
      //根据id删除对应的商品
      removeGoodsById(state, id) {
         //定义一个X来接收数据，使用X来接收新的数据
         //传过来的id是需要删除的，但是直接过滤掉就可以把不需要删除的保留在购物车
         //剩下的使用X接收成数组，就保存在cart购物车中
         // state.list = state.list.filter(x => x.id !== id)
         state.list = state.list.filter(x => x.id !== id)
         // 将查询到的结果持久化存储到本地
         this.commit('cart/saveToStorage')
      },
      //结算区域商品按钮反全选的功能实现方法
      //定义更新购物车中所有商品勾选状态的方法
      updateAllGoodsState(state, newState) {
         state.list.forEach(x => x.checked = newState)
         // 将查询到的结果持久化存储到本地
         this.commit('cart/saveToStorage')
      }
   },
   getters: {
      // 总数量
      total(state) {
         let c = 0
         state.list.forEach(x => c += x.num)
         return c
      },
      // 定义购物车结算按钮接收商品总数据的方法
      checkedCount(state) {
         // 使用过滤器filter把item每一项的total进行循环，total的初始值为0，
         // 循环一次以后变成item.goods_count，然后一致循环完成，最后赋值给total
         //再把total的值return出去给checkedCount(state)，所以最前面有一个return
         // state.cart.filter(x => x.goods_state).reduce((total,item) => {return total += item.goods_count},0)
         // 简写的写法如下
         return state.list.filter(x => x.checked).reduce((total, item) => total += item.num, 0)
      },
      // 已勾选的商品的总价
      checkedGoodsAmount(state) {
         // 把total的值return出去外面
         return state.list.filter(x => x.checked).reduce((total, item) =>
            total += item.num * item.price, 0
         ).toFixed(2)
      }
   },

   actions: {

   }
}
